package com.boboPlanet.user.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.boboPlanet.user.entity.po.MenuPO;
import com.boboPlanet.user.entity.po.RoleMenuPO;
import com.boboPlanet.user.entity.po.RolePO;
import com.boboPlanet.user.entity.po.UserRolePO;
import com.boboPlanet.user.entity.vo.MenuVO;
import com.boboPlanet.user.entity.vo.UserRoleVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Collection;
import java.util.List;

/**
 * @Description: TODO
 * @Author: mis_wu
 * @Date: 2023/2/21
 **/
@Mapper
public interface MenuMapper extends BaseMapper<MenuPO> {

    /**
     * 获取未登录菜单
     * @param sysName String
     * @param loginState int
     * @return List
     */
    List<MenuPO> getNotLoginMenus(@Param("sysName") String sysName,@Param("loginState") int loginState);

    List<UserRolePO> getRoleInfoByUserId(@Param("userId") Long userId);

    List<Long> getMenusByRoleId(@Param("roleId") Long roleId,@Param("sysName") String name);

    int judgeMenuIsExist(@Param("name") String menuName,@Param("code") String menuCode,@Param("sysName") String sysName);

    List<MenuVO> getParentMenus(@Param("menuId") Long menuId,@Param("sysName") String sysName);

    /**
     * @param role String
     * @param sysName String
     * @param flag boolean 是否精确匹配
     * @param isAll true:获取所有(角色管理)  false:获取正常(分配菜单时)
     * @return RolePO
     */
    List<RolePO> getRoleList(@Param("role") String role,@Param("sysName") String sysName,@Param("flag") boolean flag,
                             @Param("isAll") boolean isAll);

    int saveRole(@Param("po") RolePO po);

    int delRole(@Param("roleId") Long roleId);

    int showRole(@Param("roleId") Long roleId);

    List<MenuPO> selectMenuBatchIds(@Param("menuIds") List<Long> menuIds);

    int distributionRole(@Param("userRoleId") Long userRoleId,@Param("userId") Long userId,@Param("roleId") Long roleId);

    List<UserRoleVO> getRolesByUserId(@Param("userId") Long userId, @Param("sysName") String sysName);

    int judgeUserRoleIsExist(@Param("userId") Long userId,@Param("roleId") Long roleId);

    void deleteRoleByUserId(@Param("userId") Long userId,@Param("roles") Collection<Long> existRoles);

    List<MenuPO> getAllMenus(@Param("name") String name);

    void batchInsert(@Param("rmList") List<RoleMenuPO> rmList);

    void deleteRoleMenu(@Param("roleId") Long roleId,@Param("delMenuIds") List<Long> delMenu);

    void insertRoleMenu(@Param("po") RoleMenuPO roleMenuPO);

    List<Long> selectChildMenuIds(@Param("menuId") Long menu, @Param("name") String name);

    List<Long> selectChildMenusByMenuIds(@Param("menuIds") List<Long> menuIds,@Param("name")  String name);
}
